#include<bits/stdc++.h>
#define ll long long
#define stdin stdin
#define stdout stdout
using namespace std;
const int MAXN=1e5+5;
int n,m,K,T,tn,A[MAXN],X[5],Q[MAXN],a[MAXN],lg[MAXN],p2,ans;
int R[20][MAXN];
bool z2[MAXN];
string s[20];
int solve1(int k){
    for(int i=0;i<s[1].size();i++){
        tn=s[1][i]-'0'+i*2+1;
        if(a[tn]>=1) R[1][i]=tn;
        else R[1][i]=i*4+3-tn;
    }
    for(int i=2;i<=k;i++){
        for(int j=0;j<s[i].size();j++){
            tn=s[i][j]-'0'+j*2;
            if(a[R[i-1][tn]]>=i) R[i][j]=R[i-1][tn];
            else R[i][j]=R[i-1][j*4+1-tn];
        }
    }
    return R[k][0];
}
int main(){
    freopen("arena.in","r",stdin);
    freopen("arena.out","w",stdout);
    K=1,p2=2;
    for(int i=1;i<=MAXN;i++){
        if(p2==i) z2[i]=1;
        if(p2<i){
            p2*=2;
            K++;
        }
        lg[i]=K;
    }
    cin>>n>>m;
    K=lg[n];
    for(int i=1;i<=n;i++) cin>>A[i];
    for(int i=1;i<=m;i++) cin>>Q[i];
    for(int i=1;i<=K;i++) cin>>s[i];
    cin>>T;
    while(T--){
        ans=0;
        for(int i=0;i<4;i++) cin>>X[i];
        for(int i=1;i<=n;i++){
            a[i]=A[i]^X[i%4];
        }
        for(int i=1;i<=m;i++)
            ans=ans^(i*solve1(lg[Q[i]]));
        printf("%d\n",ans);
    }
    return 0;
}
